package logic

import (
	"lottery/web/blue/bluebell/dao/redis"
	"lottery/web/blue/bluebell/models"
	//"bluebell/dao/redis"
	//"bluebell/models"
	"strconv"

	"go.uber.org/zap"
)

// ---- 投票功能 ----

/* 投票的几种情况：// 赞成票（1）反对票（-1）取消投票（0）
direction = 1时, 有两种情况:
	1. 之前没有投过票， 现在投赞成票    --> 更新分数和投票记录	差值绝对值：1	+432
	2. 之前投反对票， 现在改投赞成票	--> 更新分数和投票记录	差值绝对值：2	+432*2
direction = 0 时, 有两种情况：
	1. 之前投过赞成票， 现在取消		--> 更新分数和投票记录	差值绝对值：1	-432
	2. 之前投过反对票， 现在要取消	--> 更新分数和投票记录	差值绝对值：1	+432
direction = -1 时, 有两种情况：
	1. 之前没有投过票，现在投反对票	--> 更新分数和投票记录	差值绝对值：1	-432
	2. 之前投赞成票， 现在改投反对票	--> 更新分数和投票记录	差值绝对值：2	-432*2


投票的限制：
帖子发表之日起，一个星期内，允许用户投票，超过一个星期，不允许投票。
	1. 到期后将redis中保存的数据，存储到mysql中去, 做持久化。
	2. 到期后删除对应的 KeyPostVotedPrefix
*/

// VoteForPost 为帖子投票的函数
func VoteForPost(userID int64, p *models.ParamsVoteData) error {
	// 1. 判断投票限制
	// 2. (更新帖子的分数)到期后删除那个 KeyPostVotedPrefix
	// 3. 记录用户为该帖子投票的数据和日志
	zap.L().Debug("VoteForPost", zap.Int64("userID", userID), zap.String("postID", p.PostID), zap.Int8("dir", p.Direction))
	return redis.VoteForPost(strconv.FormatInt(userID, 10), p.PostID, float64(p.Direction))
}
